import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;

public class DES {
    // DES 加密
    public static String DESEncoder(String pwd) throws Exception{
        // 创建DESKeySpec对象, 使用8个字节作为DES密钥的密钥内容
        DESKeySpec desKey = new DESKeySpec("12345678".getBytes());
        // 实例化 DES
        SecretKeyFactory key = SecretKeyFactory.getInstance("DES");
        // 生成秘密密钥
        SecretKey  secretKey = key.generateSecret(desKey);
        // 初始化密钥的模式
        Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
        // 设置加密模式
        cipher.init(1, secretKey);
        // 加密
        byte[] res = cipher.doFinal(pwd.getBytes());
        // base64加密
        System.out.println(new BASE64Encoder().encode(res));
        return new BASE64Encoder().encode(res);
    }

    // DES 解密
    public static void DESDecode(String pwd) throws Exception {
        // base64解码
        byte[] password = new BASE64Decoder().decodeBuffer(pwd);

        // 创建DESKeySpec对象, 使用8个字节作为DES密钥的密钥内容
        DESKeySpec desKey = new DESKeySpec("12345678".getBytes());
        // 实例化 DES
        SecretKeyFactory key = SecretKeyFactory.getInstance("DES");
        // 生成秘密密钥
        SecretKey  secretKey = key.generateSecret(desKey);
        // 初始化密钥的模式
        Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
        // 1:设置加密模式, 2:解密模式
        cipher.init(2, secretKey);
        // 解密
        byte[] res =  cipher.doFinal(password);
        System.out.println(new String(res));
    }

    public static void main(String[] args) throws Exception {
        // 加密
        String pwd = DESEncoder("1111");
        //解密
        DESDecode(pwd);
    }
}
